<?php
/**
 * Created by PhpStorm.
 * User: Sunqj
 * Date: 2016/11/3
 * Time: 下午8:04
 */

namespace app\api\module;

use app\admin\controller\System;
use app\common\model\DeveloperException;
use app\common\model\Message;
use app\common\model\Settings;
use app\common\model\SMS;
use app\common\model\User;
use app\common\model\UserException;
use app\common\model\WeixinPay;
use app\common\model\AliPay;
use think\Db;

class Utils extends Common
{
    /**
     * 是否需要登录（默认工具类接口不需登录）
     *
     * @param string $interface 检测的接口
     * @return bool
     */
    protected function needLogin($interface)
    {
        return false;
    }

    /**
     * 执行接口操作
     *
     * @param $interface
     * @return string
     */
    public function exec($interface)
    {
        switch ($interface)
        {
            /**
             * @api {post} / 【1001】发送短信验证码
             * @apiDescription <label class="label label-success" style="font-size: 18px;">已实现</label>
             *
             * @apiVersion 1.0.0
             * @apiName utils_send_captcha
             * @apiGroup 工具包【Utils】
             *
             * @apiUse tnCommonParamTN
             *
             * @apiParam (dataGroup) {String} type 验证码类型<br/>
             * @apiParam (dataGroup) {String} mobile 手机号
             *
             * @apiParamExample {json} 请求参数示例
             *
             * {
             *   "version": "1.0.0",
             *   "module": "Utils",
             *   "interface": "1001",
             *   "data": {
             *     "mobile": "13355064521"
             *   }
             * }
             *
             * @apiUse dkqCommonResponse
             *
             * @apiSuccessExample 成功示例
             * {
             *   "result_code": "0000",
             *   "result_info": "发送短信验证码成功"
             * }
             *
             */
            case H_UTILS_SEND_CAPTCHA:
                return $this->sendCaptcha();
            /**
             * @api {post} / 【1002】关于我们
             * @apiDescription <label class="label label-danger" style="font-size: 18px;">已实现</label>
             *
             * @apiVersion 1.0.0
             * @apiName utils_about_us
             * @apiGroup 工具包【Utils】
             *
             * @apiUse tnCommonParamTN
             *
             * @apiParam (dataGroup) {String} access_token
             *
             * @apiParamExample {json} 请求参数示例
             *
             * {
             *   "version": "1.0.0",
             *   "module": "Utils",
             *   "interface": "1002",
             *   "data": {
             *      "access_token":"alkjgkldgfjd"
             *   }
             * }
             *
             * @apiUse dkqCommonResponse
             *
             * @apiSuccess (result_data-回执报文信息) {String} about_us 关于我们
             * @apiSuccessExample 成功示例
             * {
             *   "result_data": {
             *       "about_us":"关于我们"
             *    },
             *   "result_code": "0000",
             *   "result_info": ""
             * }
             *
             */
            case H_UTILS_ABOUT_US:
                return $this->about_us();

            /**
             * @api {post} / 【1005】查询支付状态
             * @apiDescription <label class="label label-success" style="font-size: 18px;">已实现</label>
             *
             * @apiVersion 1.0.0
             * @apiName utils_pay_status
             * @apiGroup 工具包【Utils】
             *
             * @apiUse tnCommonParamTN
             *
             * @apiParam (dataGroup) {String} order_sn (订单号）
             * @apiParam (dataGroup) {String} pay_type 支付类型(1:微信，2：支付宝)
             * @apiParamExample {json} 请求参数示例
             *
             * {
             *   "version": "1.0.0",
             *   "module": "Utils",
             *   "interface": "1005",
             *   "data":
             *   {
             *      "order_sn":"1",
             *      "pay_type":1
             *   }
             * }
             *
             * @apiUse dkqCommonResponse
             *
             * @apiSuccess (result_data-回执报文信息) {String} status 状态（1：成功，2：失败）
             *
             * @apiSuccessExample 成功示例
             * {
             *   "result_data": {
             *      "status": "1"
             *   },
             *   "result_code": "0000",
             *   "result_info": ""
             * }
             *
             */
            case H_UTILS_PAY_STATUS:
                return $this->pay_status();

            /**
             * @api {post} / 【1007】服务协议
             * @apiDescription <label class="label label-success" style="font-size: 18px;">已实现</label>
             *
             * @apiVersion 1.0.0
             * @apiName utils_treaty
             * @apiGroup 工具包【Utils】
             *
             * @apiUse tnCommonParamTN
             *
             *
             * @apiParamExample {json} 请求参数示例
             *
             * {
             *   "version": "1.0.0",
             *   "module": "Utils",
             *   "interface": "1007",
             *   "data": {
             *   }
             * }
             *
             * @apiUse dkqCommonResponse
             *
             * @apiSuccess (result_data-回执报文信息) {String} treaty 用户协议
             * @apiSuccessExample 成功示例
             * {
             *   "result_data": {
             *       "treaty":"用户协议"
             *    },
             *   "result_code": "0000",
             *   "result_info": ""
             * }
             *
             */
            case H_UTILS_TREATY:
                return $this->treaty();

            /**
             * @api {post} / 【1011】检测app版本
             * @apiDescription <label class="label label-success" style="font-size: 18px;">已实现</label>
             *
             * @apiVersion 1.0.0
             * @apiName utils_checkVersion
             * @apiGroup 工具包【Utils】
             *
             * @apiUse tnCommonParamTN
             *
             * @apiParam (data-请求数据) {String} version 当前版本（一级.二级.三级）
             * @apiParamExample {json} 请求参数示例
             * {
             *    "version":"1.0.0",
             *    "module":"Utils",
             *    "interface":"1011",
             *    "data":
             *    {
             *        "version":"1.0.0"
             *    }
             * }
             *
             * @apiSuccess (基础报文信息) {String} result_code 结果编码.
             * @apiSuccess (基础报文信息) {String} result_info  结果信息.
             * @apiSuccess (基础报文信息) {Object} result_data  回执报文数据.
             *
             * @apiSuccess (result_data-回执报文信息) {String} version 最新版本
             * @apiSuccess (result_data-回执报文信息) {String} url 新版本下载地址
             *
             * @apiSuccessExample 成功示例
             * {
             *   "result_data": {
             *     "version": "1.0.1",
             *     "url": "http://admin.tnstnc.com/uploads/apks/H_app_10001.apk"
             *   },
             *   "result_code": "0000",
             *   "result_info": "获取最新版本成功！"
             * }
             *
             */
            case H_UTILS_CHECK_VERSION:
                return $this->checkVersion();

            default:

                send_developer_error("模块【工具包】中不存在接口【" . $interface . "】,核实文档后重试!");
        }
    }

    /**
     * 发送短信验证码
     * @return array
     * @throws UserException
     */
    private function sendCaptcha()
    {
        //手机号
        $mobile = $this->essentialParam("mobile");

        //判断手机号是否正确
        if (!verify_mobile($mobile))
        {
            throw new UserException("手机号不正确！");
        }

       //发送短信验证码
        SMS::sendCaptcha($mobile);

        return $this->response("验证码发送成功！");
    }
    /**
     * 关于我们
     * @return string
     */
    private function about_us()
    {
        $access_token=$this->essentialParam("access_token");
        $user=User::userFromToken($access_token);

        $about_us=Settings::getSettings(H_SETTINGS_ABOUT_US);
        $this->insertResponse('about_us',$about_us);
        return $this->response('关于我们！');
    }

    /**
     * 支付状态
     * @return array
     */
    private function pay_status()
    {
        $order_sn = $this->essentialParam("order_sn");
        $pay_type = $this->essentialParam("pay_type");

        if($pay_type==1)
        {
           $weixn= new WeixinPay();
            $status=$weixn->getPayStatus($order_sn);
        }elseif ($pay_type==2)
        {
            $ali=new AliPay();
            $status=$ali->getPayStatus($order_sn);
        }

        $this->insertResponse('status',$status);

        return $this->response('支付状态！');
    }

    /**
     * 用户协议
     * @return string
     */
    private function treaty()
    {
        $treaty=Message::getTreaty();
        $this->insertResponse('treaty',$treaty);
        return $this->response('获取规则成功！');
    }

    /**
     * 检测版本更新
     * @Return false|\PDOStatement|string|\think\Collection
     */
    private function checkVersion()
    {
        //当前版本号
        $version = $this->essentialParam('version');

        //解析版本号
        $versionList = explode(".", $version);
        // 判断版本号格式是否正确
        if (count($versionList) != 3) {
            throw new DeveloperException('版本号格式错误！');
        }

        $version = $versionList[2] + $versionList[1] * 100 + $versionList[0] * 10000;

        //查找是否有比当前版本高的
        $apk = Db::name('app_version')
            ->where('version_num', 'GT', $version)
            ->field('version,url')
            ->order('time DESC')
            ->find();

        if (!$apk) {
            throw new UserException('当前版本为最新版本！');
        } else {
            $this->insertResponse('', $apk);
            return $this->response('获取最新版本成功！');
        }
    }
}